#ifndef LISTECARTETRANSACTION_h
#define LISTECARTETRANSACTION_h

#include <stdlib.h>
#include <stdio.h>
#include "carte.h"

/**
@brief Cette fonction définit le module listecarte
@author MARLIER Molly & GUESDON Marine
@version 1.0
@date 2013/03/26
*/


typedef struct {
CarteTransaction info;
struct CelluleTransaction *suivant;
struct CelluleTransaction *precedent;
} CelluleTransaction;


typedef struct sListeT {
  CelluleTransaction *prem;
  CelluleTransaction *last;
} ListeTransaction;

/**
@brief InitialiserListe permet d'initialiser la liste pour qu'elle soit vide.
@param [in] l: pointeur sur liste.
@return none.
*/
void initialiserListeT(ListeTransaction * l);

/**
@brief ImplementeListeT permet de remplir la pioche transaction avec les cartes transactions que nous avons choisi.
@param [in] l: pointeur sur liste.
@return none.
*/
void ImplementeListeT (ListeTransaction *l);

/**
@brief AjouterEnTeteListe aoute une carte en tête de la liste.
@param [in] l: pointeur sur liste, [in] c:Carte.
@return none.
*/
/* Precondition : l et e initialises et manipules uniquement a travers les operations de leurs modules respectifs*/
void AjouterEnTeteListeT(CarteTransaction c,ListeTransaction * l);

/**
@brief AjouterEnQueueListe ajoute une carte en queue de liste.
@param [in] l: pointeur sur liste, [in] c:Carte.
@return none.
*/
/* Precondition : l et e initialises et manipules uniquement a travers les operations de leurs modules respectifs */
void AjouterEnQueueListeT(CarteTransaction c, ListeTransaction * l);

/**
@brief SupprimerTeteListe
@param [in] l: pointeur sur liste, [in] c:Carte.
@return none.
*/
/* Precondition : l n'est pas vide*/
void supprimerTeteListeT(ListeTransaction * l);

/**
@brief EstVideListe permet de teste si la liste est vide: renvoi 1 si elle l'est 0 sinon
@param [in,out] l: pointeur sur liste,
@return int
*/
int EstVideListeT(const ListeTransaction * l);

/**
@brief RecupererPremiereCarte permet de piocher la première carte du paquet
@param [in] l: pointeur sur liste
@return Carte
*/
CarteTransaction RecupererPremiereCarteT (ListeTransaction *l);


#endif
